package com.aqie.easy.array;

import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/**
 * 832. 翻转图像
 * 数组逆序
 *  + 数组转list
 *  + list 转数组
 *
 * 取反 ~
 *   9 -> 二进制  01001  ： 正数的补码 反码都是其本身
 *   补码         01001
 *   取反         10110
 * java 二进制转十进制输出
 * 0 ^ 1 = 1 1 ^ 0 = 1
 * 0 & 1 = 0 1 & 0 = 0
 * 0 | 1 = 1 1 ^ 0 = 1
 */
public class FlipAndInvertImage {
    public int[][] flipAndInvertImage(int[][] A) {
        int[][] B = new int[A.length][A[0].length];
        for(int i = 0; i < A.length;i ++){
            for(int j = A[0].length; j > 0; j--){
                B[i][A[i].length- j] = A[i][j-1] == 1 ? 0 : 1;
            }
        }
        return B;
    }

    public static void main(String[] args) {
        Integer [] arr = {1,1,0};  // (翻转)0,1,1  => (取反)1 0 0
        // 数组变 list
        ArrayList<Integer> list = new ArrayList(Arrays.asList(arr));
        // 翻转list
        Collections.reverse(list);
        // list 变数组
        Integer[] integers = list.toArray(new Integer[list.size()]);
        // 打印数组
        for (int i = 0; i < integers.length; i++){
            System.out.println(integers[i]);
            integers[i] = ~integers[i];
        }
        System.out.println(Arrays.toString(integers));

        // 十进制转二进制
        String s9 = Integer.toBinaryString(-9);
        System.out.println(s9);                    // 9: 1001 ;
        // -9 : 11111111111111111111111111110111
        System.out.println(decimalToBinary(9));
        System.out.println(decimalToBinary(-9));
        System.out.println(binaryToDecimal("1001"));
        System.out.println(binaryToDecimal("-1001"));
    }

    public static String decimalToBinary(int decimalSource) {
        BigInteger bi = new BigInteger(String.valueOf(decimalSource));	//转换成BigInteger类型
        return bi.toString(2);	//参数2指定的是转化成X进制，默认10进制
    }

    /**
     * @Description:	二进制转换成十进制
     * @param binarySource
     * @return int
     */
    public static int binaryToDecimal(String binarySource) {
        BigInteger bi = new BigInteger(binarySource, 2);	//转换为BigInteger类型
        return Integer.parseInt(bi.toString());		//转换成十进制
    }

}
